package Public

import (
	"errors"
	"fmt"
	"github.com/patrickmn/go-cache"
	"time"
)

//返回-1=冻结中 标志key不加代表全局 DieJiaJiLu=本次操作是否叠加记录
func Get次数限制记录(标志key,识别key string, DieJiaJiLu bool)int  {
	//最大错误次数
	const ZuiDaCuoWuCiShu int = 2

	val, err := _GetHuanCun(标志key,识别key)
	if err != nil {
		if DieJiaJiLu {
			_ = _SetHuanCun(标志key, 识别key, 1, false)
			return 1
		}
	}
	valInt:=val.(int)

	if DieJiaJiLu {
		valInt++
		_ = _SetHuanCun(标志key, 识别key, valInt, false)
	}

	if ZuiDaCuoWuCiShu >= valInt {
		return -1
	}
	return valInt
}

//缓存 公共
var _Cache *cache.Cache
//获取 Cache 缓存实例 公共
func _GetCache()*cache.Cache  {
	if _Cache == nil {
		//创建一个默认60秒的缓存 每1分钟清除过期项目
		_Cache = cache.New(60*time.Second, 1*time.Minute)
	}
	return _Cache
}
//设置缓存 公共 key=存储位置 value=需要存储内容
func _SetHuanCun(标志key,识别key string,value interface{},是否无限期 bool) error {
	var Time time.Duration
	if 是否无限期 {
		//使用无限期
		Time=cache.NoExpiration
	}else {
		//使用默认时间限制
		Time=cache.DefaultExpiration
	}
	_GetCache().Set(fmt.Sprint(标志key,"-",识别key),value,Time)
	return nil
}
//获取缓存 公共 key=存储位置
func _GetHuanCun(标志key,识别key string)(interface{},error)  {
	data,errbool:= _GetCache().Get(fmt.Sprint(标志key,"-",识别key))
	if !errbool {
		return "", errors.New("获取失败(或存储位置无数据")
	}
	return data, nil
}
